package com.springboot.shiro.config.shiro;

import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.HiddenHttpMethodFilter;

import java.util.Properties;

/**
 * @Date: 2019/10/25 09:32
 * @author: ybzhu
 * @Description： Kaptcha 验证码 配置
 */
@Configuration
public class KaptchaConfig {

    private final static String CODE_LENGTH = "4";
    private final static String SESSION_KEY = "verification_session_key";

    /**
     * 注册到服务中，调用 Kaptcha方法
     * @return
     */
    @Bean
    public DefaultKaptcha captchaProducer() {
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        defaultKaptcha.setConfig(captchaConfig());
        return defaultKaptcha;
    }

    /**
     * 过滤链
     * @return
     */
    @Bean
    public FilterRegistrationBean<HiddenHttpMethodFilter> filterRegistration() {
        FilterRegistrationBean<HiddenHttpMethodFilter> registration = new FilterRegistrationBean<>();
        //添加过滤器
        registration.setFilter(new HiddenHttpMethodFilter());
        //设置过滤路径，/*所有路径
        registration.addUrlPatterns("/*");
        //设置优先级
        registration.setName("HiddenHttpMethodFilter");
        //设置优先级
        registration.setOrder(2);
        return registration;
    }

    /**
     * Kaptcha方法 配置
     * @return
     */
    @Bean
    public Config captchaConfig() {
        Properties properties = new Properties();
        // 设置边框
        properties.setProperty("kaptcha.border", "no");
        // 设置边框颜色
        properties.setProperty("kaptcha.border.color", "105,179,90");
        // 设置字体颜色
        properties.setProperty("kaptcha.textproducer.font.color", "blue");
        // 设置图片宽度
        properties.setProperty("kaptcha.image.width", "173");
        // 设置图片高度
        properties.setProperty("kaptcha.image.height", "40");
        // 设置字体尺寸
        properties.setProperty("kaptcha.textproducer.font.size", "32");
        // 设置图片样式
        properties.setProperty("kaptcha.obscurificator.impl","com.google.code.kaptcha.impl.ShadowGimpy");
        // 设置session key
        properties.setProperty("kaptcha.session.key", SESSION_KEY);
        // 设置验证码长度
        properties.setProperty("kaptcha.textproducer.char.length", CODE_LENGTH);
        // 设置字体
        properties.setProperty("kaptcha.textproducer.font.names", "宋体,楷体,黑体");
        return new Config(properties);
    }
}
